import { MessageReceive } from './model/MessageReceive';
import { CollectionManager } from './model/CollectionManager';

// 确保 CollectionManager 可用
console.log('CollectionManager 导入状态 - CollectionManager import status:', {
    imported: typeof CollectionManager !== 'undefined',
    hasConsume: typeof CollectionManager?.consume === 'function'
});

console.log('内容脚本已加载 - Content script loaded', new Date().toISOString());

// 发送一个消息到后台脚本，表明内容脚本已准备好
// Send a message to background script to indicate content script is ready
chrome.runtime.sendMessage({ type: 'CONTENT_SCRIPT_READY' }, (response) => {
    console.log('内容脚本就绪通知发送成功 - Ready notification sent', response);
});

/**
 * 订阅应用广播
 */
window.addEventListener('message', (e) => {
    if (e.data?.source !== 'knowledge-harvest') return

    const { action, data } = e.data

    // 登录成功后，存储用户信息
    if (action === 'onLoginMessage') {
        chrome.storage.local.set({ user: data }, function() {
            console.log('extension save login user', data);
        })
    }
    
    if (action === 'onLogoutMessage') {
        chrome.storage.local.remove('user', function() {
            console.log('extension remove login user');
        })
    }
})

/**
 * 订阅后台消息
 */
chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
    debugger;
    // 最基本的日志，确保消息监听器被调用
    console.log('★★★ 消息监听器被调用 - Message listener called ★★★');
    console.log('★★★ 收到消息 - Received message:', message);
    console.log('★★★ 发送者 - Sender:', sender);
    
    // 如果是 PING 消息，直接响应
    if (message.type === 'PING') {
        console.log('收到 PING 消息，直接响应 - Received PING message, responding directly');
        sendResponse({ status: 'ok' });
        return true; // 返回 true 表示异步响应
    }
    
    try {
        console.log('★★★ 尝试消费消息 - Trying to consume message with ID:', message.id);
        
        // 检查是否是收藏管理器消息
        if (message.id === 'COLLECTION_MANAGER') {
            console.log('★★★ 收到收藏管理器消息 - Received CollectionManager message:', message);
            console.log('★★★ 消息动作 - Message action:', message.action);
            
            // 直接调用 CollectionManager 的消费函数
            console.log('★★★ 尝试直接调用 CollectionManager - Trying to directly call CollectionManager');
            
            try {
                // 检查 CollectionManager 是否可用
                console.log('★★★ CollectionManager 对象可用性:', typeof CollectionManager !== 'undefined');
                
                if (typeof CollectionManager !== 'undefined') {
                    console.log('★★★ CollectionManager.consume 函数可用性:', typeof CollectionManager.consume === 'function');
                    
                    // 直接调用 CollectionManager.consume
                    if (typeof CollectionManager.consume === 'function') {
                        console.log('★★★ 直接调用 CollectionManager.consume');
                        CollectionManager.consume(message).then(result => {
                            console.log('★★★ CollectionManager.consume 结果:', result);
                            sendResponse(result);
                        }).catch(error => {
                            console.error('★★★ CollectionManager.consume 错误:', error);
                            sendResponse({ message: 'error', error: String(error) });
                        });
                    } else {
                        // 如果 CollectionManager.consume 不可用，尝试使用 MessageReceive.consume
                        console.log('★★★ CollectionManager.consume 不可用，尝试 MessageReceive.consume');
                        const result = MessageReceive.consume(message);
                        console.log('★★★ MessageReceive.consume 结果:', result);
                        sendResponse(result);
                    }
                } else {
                    // 如果 CollectionManager 不可用，尝试使用 MessageReceive.consume
                    console.log('★★★ CollectionManager 不可用，尝试 MessageReceive.consume');
                    const result = MessageReceive.consume(message);
                    console.log('★★★ MessageReceive.consume 结果:', result);
                    sendResponse(result);
                }
            } catch (innerError) {
                console.error('★★★ 处理收藏管理器消息时出错:', innerError);
                sendResponse({ message: 'error', error: String(innerError) });
            }
            
            return true; // 返回 true 表示异步响应
        }
        
        // 其他消息使用消息接收器处理
        const result = MessageReceive.consume(message);
        console.log('消息消费结果 - Message consume result:', result);
        
        if (result) {
            sendResponse(result);
        }
    } catch (error) {
        console.error('消息处理错误 - Message processing error:', error);
        sendResponse({ message: 'error', error: error.message || 'Unknown error' });
    }
    
    return true; // 返回 true 表示异步响应
})